<?php
namespace app\wap\controller;

use app\BaseController;
use liliuwei\think\Jump;                // success跳转
use think\Request;

use think\facade\Db;
use think\facade\Session;

// use think\View;                      // 与门面方法不能共存，二选一
use think\facade\View;                  // 门面方法


use app\wap\middleware\Checkinput;      // 中间件


use app\wap\model\Goods;
use app\wap\validate\Users;             // 验证类

use think\exception\ValidateException;  // 异常




class Index extends BaseController
{

    // 他妈的，这个地方不能放在class外面 liliuwei\think\Jump(tp废弃掉的success error方法)
    use Jump;

    // 他妈的，此处屏蔽也没有报错，后续观察之
    protected $request;


    /*
     * 控制器中间件
     *
     * 1、[Check::class]; 必须use php
     * 2、等效的，[\app\wap\middleware\Check::class]，不用引入use php
     * */
    // protected $middleware = [\app\wap\middleware\Check::class];
    protected $middleware = [Checkinput::class];


    public function index(Request $request)
    {
        if(request()->isPost()){
            // 令牌验证
            $check = $request->checkToken('__token__', $request->param());
            if(false === $check) {
                throw new ValidateException('令牌错误');
            }

            try {
                // 单行验证|批量验证二选一
                validate(Users::class)->check([
                    'username'  => 'thinkphp',
                    'mobile'    => 15095123127,
                    'email'     => 'thinkphp@qq.com',
                ]);

                // 批量验证
                $result = validate(Users::class)->batch(true)->check([
                    'username'  => 'thinkphp',
                    'mobile'    => 15095123127,
                    'email'     => 'thinkphp@qq.com',
                ]);
                if (true !== $result) {
                    // 验证失败 输出错误信息
                    dump($result);
                }
            } catch (ValidateException $e) {
                // 验证失败 输出错误信息
                dump($e->getError());
            }
            exit;
        }

        // 表单令牌
        $token = $request->buildToken('__token__', 'sha1');

        // 下载文件
        download('image.jpg', 'my.jpg');

        session('session66', 'mike');
        $session = session('session66');

        // 门面方法
        View::assign('session', $session);
        View::assign('name', 'ThinkPHP');
        View::assign('token', $token);

        return view();
    }

    // 验证器
    public function validate7(Request $request){

        // 令牌验证
        $check = $request->checkToken('__token__');
        if(false === $check) {
            throw new ValidateException('令牌无效');
        }

        try {
            // 单行验证|批量验证二选一
            validate(Users::class)->check([
                'username'  => 'thinkphp',
                'mobile'    => 15095123127,
                'email'     => 'thinkphp@qq.com',
            ]);

            // 批量验证
            $result = validate(Users::class)->batch(true)->check([
                'username'  => 'thinkphp',
                'mobile'    => 15095123127,
                'email'     => 'thinkphp@qq.com',
            ]);
            if (true !== $result) {
                // 验证失败 输出错误信息
                dump($result);
            }
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            dump($e->getError());
        }
    }

    // 依赖注入
    public function test(Request $request)
    {

        // 使用了控制器中间件; 先依赖注入后调用
        // dump($request->username);

        /*
        * 分发UserLogin事件, 事件监听
        * 需要在event.PHP中设置
        * */
        // event('UserLogin', ['desc'=>'我是‘事件’监听']);

        // 门面方法
        // View::assign('name','ThinkPHP');
        // return view();

        // view('test', ['name'=>'value']);
        // display('test', ['name'=>'value']);

        // success/error/redirect/result方法，需要 use \liliuwei\think\Jump;
        // return $this->success('哈哈');

        // 门面方法
         $set_userid = Session::set('user_id', '1941663');
         $get_userid = Session::get('user_id');

         $set_userid = session('user_id', '1941663');
         $get_userid = session('user_id');

        // 容器： 绑定类库标识
        // $admin = $this->app->bind('admin', 'app\admin\controller\Admin');
        // dump(app('admin')->admin('89'));

        // 模型
        $goods = new goods();
        $res   = $goods->test();

    }

    public function test2()
    {
        echo 222;
        $name = request()->param('name');
        return 'test2---> ' . $name;
    }

    public function test3()
    {
        echo 333;
        $id = request()->param('id');
    }

    public function test4()
    {
        echo 444;
        echo '<br/>';
        $id   = request()->param('id');
        $user = request()->param('user');

        return 'test4--->' . $id . $user;
    }




}
